home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / print / hpgl2ps.zip / LINETYPE.C < prev    next >
C/C++ Source or Header  |  1989-08-08  |  3KB  |  162 lines

  1. /* linetype.c
  2.  * Sets the line type and the scaling of the line pattern 
  3.  *
  4.  * Don McCormick CSIRO Division of Applied Physics National Measurements
  5.  * Laboritory Bradfield Road Lindfield 2018 N.S.W. 
  6.  *
  7.  * NOTE: default length for a line pattern is approx 6.5 mm on A4 size paper. 
  8.  */
  9. #include "defn.h"
  10.  
  11. float   linescale;
  12. int     linestyle;
  13.  
  14. linetype(line)
  15. int     line;
  16. {
  17.     float   down1, down2;
  18.     float   up1, up2;
  19.     float   diagonal;
  20.  
  21.     end_draw();
  22.  
  23.     if (line == LINE_TYPE_SCALE)            /* HP-GL only */
  24.     {
  25.     if (SIGNED_NUMERIC)
  26.     {
  27.         if ((linestyle = rint(getval())) > 6)
  28.         linestyle = 6;
  29.         else if (linestyle < -6)
  30.         linestyle = -6;
  31.     }
  32.     else
  33.     {
  34.         SETDOT = 0;
  35.         printf("[] 0 setdash\n");
  36.         return;
  37.     }
  38.  
  39.     diagonal = pow((xmax - xmin),2.0) + pow((ymax - ymin),2.0);
  40.     diagonal = pow(diagonal,0.5);
  41.     if (SIGNED_NUMERIC)
  42.         linescale = getval() * 0.01 * diagonal * XSCALE * SCALE * 0.2;
  43.     else
  44.         linescale = 0.015 * diagonal * XSCALE * SCALE * 0.2;
  45.     } else
  46.     if (line == LINESCALE)    /* DXY commands only */
  47.     {
  48.     if (SIGNED_NUMERIC)
  49.         linescale = getval() / 80 * SCALE;
  50.     else
  51.         return;
  52.     } else
  53.     if (line == LINETYPE)    /* DXY commands only */
  54.     {
  55.     if (SIGNED_NUMERIC)
  56.     {
  57.         if ((linestyle = rint(getval())) > 5)
  58.         linestyle = 5;
  59.         else if (linestyle < -5)
  60.         linestyle = -5;
  61.     }
  62.     else
  63.         return;
  64.     } else
  65.     {
  66.     fprintf(stderr, "Error: Unknown line flag in linetype.c\n");
  67.     exit(1);
  68.     }
  69.     /*
  70.      * select a line style/type and scale/pitch 
  71.      */
  72.     switch (linestyle)
  73.     {
  74.     case 6:
  75.     down1 = 2.0;
  76.     up1 = up2 = 1.5;
  77.     down2 = 1.5;
  78.     break;
  79.  
  80.     case 5:
  81.     down1 = 3.0;
  82.     up1 = up2 = 1.0;
  83.     down2 = 1.5;
  84.     break;
  85.  
  86.     case 4:
  87.     down1 = 4.0;
  88.     up1 = up2 = 0.75;
  89.     down2 = 1.0;
  90.     break;
  91.  
  92.     case 3:
  93.     down1 = 5.0;
  94.     up1 = up2 = 1.0;
  95.     down2 = 0.5;
  96.     break;
  97.  
  98.     case 2:
  99.     down1 = 5.5;
  100.     up1 = 1.0;
  101.     up2 = down2 = 0.0;
  102.     break;
  103.  
  104.     case 1:
  105.     down1 = 5.0;
  106.     up1 = 1.5;
  107.     up2 = down2 = 0.0;
  108.     break;
  109.  
  110.     case -1:
  111.     down1 = 1.5;
  112.     up1 = 3.5;
  113.     down2 = 1.5;
  114.     up2 = 0.0;
  115.     break;
  116.  
  117.     case -2:
  118.     down1 = 2.0;
  119.     up1 = 2.5;
  120.     down2 = 2.0;
  121.     up2 = 0.0;
  122.     break;
  123.  
  124.     case -3:
  125.     down1 = 2.5;
  126.     up1 = up2 = 1.75;
  127.     down2 = 0.5;
  128.     break;
  129.  
  130.     case -4:
  131.     down1 = 2.5;
  132.     up1 = up2 = 1.5;
  133.     down2 = 1.5;
  134.     break;
  135.  
  136.     case -5:
  137.     down1 = down2 = 2.0;
  138.     up1 = up2 = 1.25;
  139.     break;
  140.  
  141.     case -6:
  142.     down1 = down2 = 1.75;
  143.     up1 = up2 = 1.5;
  144.     break;
  145.     }
  146.     if (linestyle == 0)
  147.     {
  148.     SETDOT = 1;        /* For HP-GL only */
  149.     printf("[] 0 setdash\n");    /* For DXY commands */
  150.     } else
  151.     {
  152.     SETDOT = 0;        /* For HP-GL only */
  153.     if (linescale <= 0) linescale = SCALE;
  154.     down1 *= linescale;
  155.     up2 *= linescale;
  156.     up1 *= linescale;
  157.     down2 *= linescale;
  158.     printf("[%g mm %g mm %g mm %g mm] 0 setdash\n",
  159.            down1, up1, down2, up2);
  160.     }
  161. }
  162.